package cn.shop.cloud.redis;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @program: shop-parent
 * @ClassName MyRedisAutoConfiguration
 * @description:
 * @author: Mokio
 * @create: 2024−12-23 17:13
 * @Version 2024 2.2 ; jdk1.8.0_181
 **/
// 配置类
@Configuration
/*
绑定配置类，一旦绑定了封装好属性的RedisProperties类，则Springboot自动配置就会被启用，
从而自动从线上配置文件redis.yml中获取到对应的属性值。当然，正如下一条标签规定的一样，
如果配置文件中没有配置redis.host属性，则该配置类也不会启用，也就是不会创建MyRedisTemplate对象。
*/
@EnableConfigurationProperties(RedisProperties.class)
// 判断配置文件中是否配置了redis.host属性,如果配置了则启用配置类
@ConditionalOnProperty(prefix = "redis",value = "host")
public class MyRedisAutoConfiguration {

    // 利用Bean标签创建MyRedisTemplate对象
    @Bean
    public MyRedisTemplate myRedisTemplate(){
        return new MyRedisTemplate();
    }

    // 创建JedisPool对象, 注入RedisProperties对象
    @Bean
    public JedisPool jedisPool(RedisProperties redisProperties){

        //给连接池添加属性
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxIdle(redisProperties.getPoolMaxIdle());
        config.setMaxTotal(redisProperties.getPoolMaxTotal());
        config.setMaxWaitMillis(redisProperties.getPoolMaxWait()*1000);//单位是毫秒

        return new JedisPool(config,
                redisProperties.getHost(),
                redisProperties.getPort(),
                redisProperties.getTimeout(),
                redisProperties.getPassword());

    }

}
